嗨我是k66,上一篇由豬油博士帶我們用x86 組合語言(.asm, assembly)實作出的最簡單bootloader,並透過NASM轉成Oinkbootloader.bin。理論上只需要將Oinkloader.bin放入USB driver中並將其設為MBR[註1]就能開機了。
我們先以QEMU[註2]模擬,指令qemu-system-x86_64 -fda bootloader.bin
,會在QEMU視窗中出現前一篇寫得No Pig Killing字樣。
讓Ointbootloader在虛擬機(QEMU)跑完後接著在實體機器上跑,需要主機板[註3]支援。目前近五年後市售的電腦幾乎不支援Legacy BIOS了[註4]。不幸地,目前我手邊的四台電腦皆沒有支援Legacy BIOS,因此無法在實體機使用Oinkbootloader。正是因為近代電腦幾乎不支援Legacy BIOS,因此小豬Oink想要嚇唬邪惡城主就得換方式寫boot loader。
小豬Oink:博士怎麼辦,我們寫好的第一支boot loader竟然不能在邪惡城主的電腦上使用…
豬油博士:Oink你別灰心,好不容易寫好的程式不能在實體機器上運行是常有的事。你還年輕,趁早習慣吧~
小豬Oink:…
豬油博士:年輕人打起精神!你想一下為什麼近代電腦不支援Legacy BIOS的理由。
小豬Oink:應該是人們覺得Legacy BIOS有什麼缺點吧!
豬油博士:答對了!不只是缺點,還是致命性大缺點!
小豬Oink:是什麼缺點要禁止呢?
豬油博士:Legacy BIOS有驅動程式最多1MB的限制與需放到真實模式[註5]的限制,
故設計者想到UEFI BIOS取代Legacy BIOS,
UEFI BIOS除了解決前兩項限制外,另還多了安全功能[註6]。
我先講概念,接著就來教你實作UEFI版的boot loader吧!
小豬Oink:好耶!謝謝博士!
[註1] 將USB轉換為MBR格式,可透過Windows的Diskpart指令與Linux的dd指令。請特別注意換分區後USB driver會被當下的作業系統認不到,只有在進入Legacy BIOS才能被認得。
[註2] QEMU是一種跨指令集架構的虛擬機,在開發底層程式時常用來模擬。
[註3] 說是主機板支援,其實是主機板上一顆小小的IC,將BIOS程式燒錄在其上,需此IC內的BIOS程式支援Legacy BIOS。
[註4] 2015年後出廠的Macbook不支援Legacy BIOS,其他家不定。
[註5] 每個驅動程式要執行都要先切至真實模式,使效率低。
[註6] UEFI支援安全啟動。